package wiki.xsx.jg.core;

import java.util.Map;
import java.util.Set;

/**
 * 数据库服务接口
 */
public interface DatabaseService {

    /**
     * 设置实体类相关信息
     * @throws Exception 异常信息
     */
    void setEntityInfo() throws Exception;

    /**
     * 根据实体类对象集合创建数据表
     * @param entitySet 实体类对象集合
     * @throws Exception 异常信息
     */
    void createTables(Set<Entity> entitySet) throws Exception;

    /**
     * 获取数据库对象
     * @return 返回数据库对象
     */
    Database getDatabase();

    /**
     * 根据数据库类型获取对应的Java类型
     * @param dataTypeName 数据库类型
     * @param length 数据长度
     * @param scale 小数位数
     * @return 返回对应类型的class对象
     */
    Class<?> getTypeClass(String dataTypeName, int length, int scale);

    /**
     * 根据Java类型获取数据库中数据类型
     * @param type 类对象
     * @return 返回数据库中数据类型字符串
     */
    String getDataType(Class<?> type);

    /**
     * 根据类名称获取表的删除语句
     * @param className 类名称
     * @return 返回sql语句
     */
    String getDropTableSQL(String className);

    /**
     * 根据数据库表对象获取表的创建语句集合
     * @param entity 实体类对象
     * @return 返回sql语句集合
     */
    Map<String, Object> getCreateTableSQLMap(Entity entity);
}
